let lib3d_litemode = false;

/**
 * yʃ[h̐؂ւ
 * trueɂzWvZȂȂ̂ŏyȂ܂
 * zW̒lKvȂꍇtrueɂ
 * 
 * @param {Boolean} flag yʃ[htO
 */
function Lib3DLiteMode( flag ){
	lib3d_litemode = flag;
}

/**
 * ]쐬
 * vxyz̉]pxꂼɑ΂sin,cos߂邾
 * 
 * @param {Integer} x x]px
 * @param {Integer} y y]px
 * @param {Integer} z z]px
 * @return {Array(Integer)} ](vf6̔zAxyz]ʂsin,cosl)
 */
function MakeRotation( x, y, z ){
	return [ sin( x ), sin( y ), sin( z ), cos( x ), cos( y ), cos( z ) ];
}

/**
 * 3DW2DWɕϊ 1
 * {`ł
 * 
 * @param {Integer}        x   xW
 * @param {Integer}        y   yW
 * @param {Integer}        z   zW
 * @param {Array(Integer)} rot ](vf6̔zAxyz]ʂsin,cosl)
 * @return {Array(Integer)} xW,yW,zW̔z[x,y,z]
 */
function Conv3Dto2D( x, y, z, rot ){
	let sa = rot[ 0 ];
	let ca = rot[ 3 ];
	let sb = rot[ 1 ];
	let cb = rot[ 4 ];
	let sc = rot[ 2 ];
	let cc = rot[ 5 ];
	
	let xsc = x * sc;
	let xcc = x * cc;
	let ysc = y * sc;
	let ycc = y * cc;
	let zsa = z * sa;
	let zca = z * ca;
	
	let xscycc = xsc + ycc;
	let xccysc = xcc - ysc;
	
	let xscyccsazca = xscycc * sa + zca;
	
	let xx = xscyccsazca * sb + xccysc * cb;
	let yy = xscycc * ca - zsa;
	let zz = 0;
	
	if( !lib3d_litemode ){
		zz = xscyccsazca * cb - xccysc * sb;
	}
	
	return [ xx, yy, zz ];
}

/**
 * 3DW2DWɕϊ 2
 * zWSɖyʔłł
 * 
 * @param {Integer}        x   xW
 * @param {Integer}        y   yW
 * @param {Array(Integer)} rot ](vf6̔zAxyz]ʂsin,cosl)
 * @return {Array(Integer)} xW,yW̔z[x,y]
 */
function Conv3Dto2DLite( x, y, rot ){
	let sa = rot[ 0 ];
	let ca = rot[ 3 ];
	let sb = rot[ 1 ];
	let cb = rot[ 4 ];
	let sc = rot[ 2 ];
	let cc = rot[ 5 ];
	
	let xsc = x * sc;
	let xcc = x * cc;
	let ysc = y * sc;
	let ycc = y * cc;
	
	let xscycc = xsc + ycc;
	let xccysc = xcc - ysc;
	
	let xscyccsa = xscycc * sa;
	
	let xx = xscyccsa * sb + xccysc * cb;
	let yy = xscycc * ca;
	let zz = 0;
	
	return [ xx, yy, zz ];
}
